package com.class05.dao.impl;

import com.alibaba.fastjson.JSONObject;
import com.class05.dao.StudentDao;
import com.class05.pojo.Student;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class StudentImpl implements StudentDao {
    @Override
    @Test
    public void findAll() throws SQLException {
//        1、创建一个Product对象，存储jdbc.properties配置文件中的数据库连接信息
        Properties properties = new Properties();
//      2.读取外部配置文件，获取输入流，加载到Properties集合里。
        InputStream resourceAsStream = this.getClass().getClassLoader()
                .getResourceAsStream("jdbc.properties");
        try {
            properties.load(resourceAsStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 3.创建Hikari连接池配置对象，将Properties集合传进去
        HikariConfig hikariConfig = new HikariConfig(properties);
        // 4. 基于Hikari配置对象，构建连接池
        HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);

        // 5. 获取连接
        Connection connection = hikariDataSource.getConnection();
        System.out.println("connection = " + connection);
        //    3、获取执行sql的对象  //    4、执行sql
        String sql = "select * from students";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //    5、处理结果
        ResultSet resultSet = preparedStatement.executeQuery();
        List<Student> students = new ArrayList<>(); // 在循环体外初始化列表
        while (resultSet.next()) {
            Student student = new Student(resultSet.getInt("student_id"),
                    resultSet.getString("name"),
                    resultSet.getString("gender"),
                    resultSet.getInt("age"),
                    resultSet.getString("email"),
                    resultSet.getString("phone"),
                    resultSet.getString("address"),
                    resultSet.getDate("enrollment_date"));
            students.add(student); // 将学生对象添加到列表中
        }
//        把 students 转换为json字符串
        String jsonString = JSONObject.toJSONString(students);
        System.out.println(jsonString);

        //6.回收连接
        connection.close();

    }


//    jdbc 操作数据库6步骤：
//    1、注册驱动
//    2、获取连接
//    3、获取执行sql的对象
//    4、执行sql
//    5、处理结果
//    6、释放资源


}
